package com.amap.map.util.common.database;

import com.amap.map.util.Configuration;
import com.amap.map.vo.localtion.LocationInfo;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/** 
 * SQLiteOpenHelper是一个辅助类，用来管理数据库的创建和版本他，它提供两个方面的功能 
 * 第一，getReadableDatabase()、getWritableDatabase()可以获得SQLiteDatabase对象，通过该对象可以对数据库进行操作 
 * 第二，提供了onCreate()、onUpgrade()两个回调函数，允许我们再创建和升级数据库时，进行自己的操作 
 */ 
public class DatabaseHandler extends SQLiteOpenHelper {

	/** 
     * 在SQLiteOpenHelper的子类当中，必须有该构造函数 
     * @param context   上下文对象 
     * @param name      数据库名称 
     * @param factory 
     * @param version   当前数据库的版本，值必须是整数并且是递增的状态 
     */ 
	public DatabaseHandler( Context context ) {
		super(context, Configuration.DATABASE_NAME , null , Configuration.DATABASE_VERSION );
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		StringBuffer sql =  new StringBuffer() ;
		sql.append("CREATE TABLE location (id INTEGER DEFAULT '1' NOT NULL PRIMARY KEY AUTOINCREMENT,localtionx DOUBLE  NOT NULL,localtiony DOUBLE  NOT NULL)" );
        db.execSQL( sql.toString() );			//需要异常捕获
	}

	@Override
	public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
		// TODO Auto-generated method stub
		
	}
	
	 /**
     * 添加数据
     */
    public long insert(){
            SQLiteDatabase db= getWritableDatabase();//获取可写SQLiteDatabase对象
            //ContentValues类似map，存入的是键值对
            ContentValues contentValues = new ContentValues();
            contentValues.put( "localtionx" , 25.365 );
            contentValues.put( "localtiony" , 123.255 );
            return db.insert( "location", null, contentValues );
    }
    
    /****
     * 数据填充
     * @param tableName
     * @param contentValues
     */
    public void save( String tableName ,ContentValues contentValues ){
    	SQLiteDatabase db= getWritableDatabase();//获取可写SQLiteDatabase对象
    	db.insert(tableName, null , contentValues ) ;
    }
    
    /****
     * 只保存一条成功的定位信息，作为下次启动的加载页面显示
     * @param tableName
     * @param contentValues
     */
    public void oneDataTable(String tableName ,ContentValues contentValues){
    	SQLiteDatabase db= getWritableDatabase();				//获取可写SQLiteDatabase对象
    	db.delete("location", "id>?", new String[]{"0"} ) ;		//SQL 第一参数：表  第二参数：where 第三参数：参数值
    	db.insert(tableName, null , contentValues ) ;
    }
    
    public void delete(){
    	SQLiteDatabase db= getWritableDatabase();				//获取可写SQLiteDatabase对象
    	db.delete("location", "id>?", new String[]{"0"} ) ;		//SQL 第一参数：表  第二参数：where 第三参数：参数值
    }
    
    public LocationInfo query(){
    	SQLiteDatabase db = this.getReadableDatabase() ;
    	Cursor cursor = db.rawQuery("select * from location", null);
    	LocationInfo info = new LocationInfo() ;
    	while (cursor.moveToNext()) {
    		info.setLocaltionx( cursor.getDouble(1) ); //获取第一列的值,第一列的索引从0开始
    		info.setLocaltiony( cursor.getDouble(2) );
    	}
    	cursor.close();
    	db.close();
    	return info ;
    }
    
    

}
